// 在 utils/request.js 中，专门来封装 axios
import axios from 'axios'

import store from '@/store'
import router from '@/router'

// 用这个对象，专门请求百度的后端接口
const request = axios.create({
  baseURL: 'http://www.liulongbin.top:3008'
})

// 添加全局拦截器
// 请求拦截器
// 注意：把官方实例粘贴过来以后，一定要把前边的axios替换成request
// 核心注意点，用谁发请求，就把拦截器挂载给谁
request.interceptors.request.use(
  function (config) {
    if (config.url.startsWith('/my')) {
      // 在这里，全局统一添加token认证
      config.headers.Authorization = store.state.user.token
    }
    // console.log(config)
    // console.log(store)
    return config
  },
  function (error) {
    // Do something with request error
    return Promise.reject(error)
  }
)

// 添加响应拦截器
request.interceptors.response.use(
  function (response) {
    // Any status code that lie within the range of 2xx cause this function to trigger
    // 凡事响应状态码都是以 2xxx开头的，都会执行该回调函数(200,201)
    // Do something with response data
    return response
  },
  function (error) {
    // Any status codes that falls outside the range of 2xx cause this function to trigger
    // 凡事响应状态码 不是以2xx开头的，则则执行这个回调函数(401,500,404)
    // Do something with response error
    if (error.response.status === 401) {
      // 证明token过期，发送给服务器是一个无效的Token
      // 清除vuex中的Token,以及用户user数据
      store.commit('user/updateToken', '')
      store.commit('user/updateUser', {})
      // 跳转到登录页面
      router.push('/login')
      // console.log(router)
    }
    // console.dir(error)
    return Promise.reject(error)
  }
)

// 今后，我们的项目中，都使用 request 来发起 Ajax 的请求
// 记住：在项目中，只要封装 API 接口，就必须导入 utils/request.js 来发起请求
export default request
